package test.client.support.thread;

import java.util.Collection;

import test.client.thread.BaseThread;
import test.domain.environment.MetaThread;

public interface ThreadManager {
	void initialize(MetaThread meta);
	
	boolean isInitialized();
	
	void put(BaseThread thread);
	
	Collection<BaseThread> getAll();
	
	BaseThread get(int id);
	
	/*
	 * start all managed threads
	 */
	void start();
	
	/*
	 * stop all managed threads. stop operation should be implemented by client thread
	 */
	void stop();
	
	boolean isAllThreadStarted();
	
	boolean isAllThreadDone();
	
	void printAllThreadStatus();
	
	int getMaxThreadCount();
	
	int getStartedThreadCount();
	
	int getCompletedThreadCount();
}
